package com.web;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;


import com.metier.IAdmin;
import com.metier.IOutils;

/**
 *
 * @author Contacto
 * Classe gerant les actions de la partie administration du site Contacto
 */
public class AdminServlet extends HttpServlet {

	/**
	 * Logger
	 */
	private static final Logger LOG4J = Logger.getLogger(AdminServlet.class);

	/**
	 * Methode appellee dans le cas d'un passage parametres de type get
	 * Cette methode est appellee quelque soit l'action demande par l'utilisateur et se charge
	 * de la redirection
	 */
	public void doGet(	HttpServletRequest request, 
			HttpServletResponse response)
					throws IOException, ServletException{ 

		String action = request.getParameter("action");

		if(action.equals("formParametresAdmin"))	//Si on modifie les parametres du site
		{
			doParametresAdmin(request, response);
		}
		else if(action.equals("versAjoutAdmin"))	//Si l'on clique sur le lien d'ajout d'aministrateur
		{
			request.setAttribute("page", "ajout_admin_bloc.jsp");
			request.getRequestDispatcher("/pages/admin/admin.jsp").forward(request, response);
		}
		else if(action.equals("versParametresAdmin"))	//Si l'on clique sur le lien de modification des parametres du site
		{
			request.setAttribute("page", "parametres_bloc.jsp");
			request.getRequestDispatcher("/pages/admin/admin.jsp").forward(request, response);
		}
		else if(action.equals("formAjoutAdmin"))	//Si l'on ajoute un administrateur
		{
			doAjouterAdmin(request, response);
		}else
		{
			doErreur(request, response);
		}
	}

	/**
	 * Methode appellee dans le cas d'un argument "action" incorrect
	 */
	private void doErreur(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		LOG4J.debug("Entre dans : doErreur");
		request.getRequestDispatcher("/pages/erreur.jsp").forward(request, response);
		LOG4J.debug("Sort de : doErreur");
	}

	/**
	 * Methode appellee dans le cas d'un passage parametres de type post
	 */
	public void doPost(	HttpServletRequest request, 
			HttpServletResponse response)
					throws IOException, ServletException{
		//Redirection vers la methode doGet
		doGet(request,response);
	}

	/**
	 * Modification des parametres du site
	 */
	public void doParametresAdmin(	HttpServletRequest request, 
			HttpServletResponse response)
					throws IOException, ServletException{

		LOG4J.debug("Entre dans : doParametresadmin");
		
		HashMap<String,String> parametres = new HashMap<String,String>();
		parametres.put("nbResSugg", ControleSecurite.controle((String)request.getParameter("nbResSugg")));
		parametres.put("nbResSuggAff", ControleSecurite.controle((String)request.getParameter("nbResSuggAff")));
		parametres.put("mmEcoleMmPeriode", ControleSecurite.controle((String)request.getParameter("mmEcoleMmPeriode")));
		parametres.put("mmEntrMmPeriode", ControleSecurite.controle((String)request.getParameter("mmEntrMmPeriode")));
		parametres.put("nbContactCommun", ControleSecurite.controle((String)request.getParameter("nbContactCommun")));
		parametres.put("nbNewsAff", ControleSecurite.controle((String)request.getParameter("nbNewsAff")));
		parametres.put("distMaxSugg", ControleSecurite.controle((String)request.getParameter("distMaxSugg")));
		
		IAdmin admin = (IAdmin) request.getSession().getAttribute("Utilisateur");
		admin.setParametres(parametres);

		request.setAttribute("page", "parametres_bloc.jsp");
		request.setAttribute("changement", "fait");
		request.getRequestDispatcher("/pages/admin/admin.jsp").forward(request, response);
		LOG4J.debug("Sort de : doParametresadmin");
	}

	/**
	 *	Ajoute un admin dans le systeme 
	 */
	public void doAjouterAdmin(	HttpServletRequest request, 
			HttpServletResponse response)
					throws IOException, ServletException{
		LOG4J.debug("Entre dans : doAjouterAdmin");

		String nom = ControleSecurite.controle((String) request.getParameter("nom"));
		String prenom = ControleSecurite.controle((String) request.getParameter("prenom"));
		String email = ControleSecurite.controle((String) request.getParameter("email"));
		String motDePasse = ControleSecurite.controle((String) request.getParameter("motDePasseCrypte"));
		
		IAdmin admin = (IAdmin) request.getSession().getAttribute("Utilisateur");
		
		//Verification securite
		nom = ControleSecurite.controle(nom);
		prenom = ControleSecurite.controle(prenom);
		email = ControleSecurite.controle(email);
		motDePasse = ControleSecurite.controle(motDePasse);
		
		IOutils outils = (IOutils)this.getServletContext().getAttribute("Outils");
		if (outils.getExistenceUtilisateur(email))
		{
			request.setAttribute("page", "ajout_admin_bloc.jsp");
			request.setAttribute("changement", "pasFait");
			request.getRequestDispatcher("/pages/admin/admin.jsp").forward(request, response);
			
		}
		else
		{
			admin.ajouterAdmin(nom, prenom, email, motDePasse);
			request.setAttribute("page", "ajout_admin_bloc.jsp");
			request.setAttribute("changement", "fait");
			request.getRequestDispatcher("/pages/admin/admin.jsp").forward(request, response);
		}

		LOG4J.debug("Sort de : doAjouterAdmin");
	}
}